The amount of data representing media information, such as a still image and video image, can be extremely large. Further, transmitting digital video information over communication networks can consume large amounts of bandwidth. The cost of transmitting data from one location to another is a function of number of bits transmitted per second. Typically, higher bit transfer rates are associated with increased cost. Higher bit rates can also progressively add to required storage capacities of memory systems, thereby increasing storage cost. Thus, at a given quality level, it can be much more cost effective to use fewer bits, as opposed to more bits, to store digital images and videos. It therefore can be desirable to compress media data for recording, transmitting, or storing.
For a typical compression scheme, achieving higher media quality requires more bits used, which can, in turn, increase cost of transmission and storage. While lower bandwidth traffic can be desired so may higher quality media.
An encoder is a device capable of encoding (e.g., coding) (and sometimes decoding) digital media data. A decoder is a device capable of decoding digital media data. A codec is a device capable of coding and/or decoding digital media data. The term codec is derived from a combination of the terms code and decode, or the terms compress and decompress. A variety of codecs are commercially available. Generally speaking, for example, codec classifications include discrete cosine transfer codecs, fractal codecs, and wavelet codecs. An encoder or codec, by encoding the digital media data, can reduce the number of bits required to transmit signals thereby reducing associated transmission costs.
One part of the encoding process typically involves using motion estimation to facilitate encoding of digital media data. In most cases, consecutive video frames in a sequence of video frames will be relatively similar except for the movement of an object(s) within a frame from one video frame to the next video frame. Motion estimation techniques take advantage of similarities between consecutive video frames to more efficiently encode a video frame. For instance, an encoder, employing a motion estimation technique, can use a previous video frame as a reference when encoding a current video frame. The encoder generates motion vectors for the current video frame based on the previous video frame, which can be a reconstructed video frame. The encoder identifies differences between the reference video frame and current video frame, and codes the portions of the current video frame that are different from the reference video frame, without having to code the portions of the current video frame that are unchanged from the reference video frame. This can thereby make the encoding process and decoding process more efficient.
However, motion estimation is one of the most computing intensive parts of the video encoding process. The better the motion vector, the more the bit rate can be reduced and the more visual quality can be improved. While identifying the best motion vector can reduce the bit rate and improve visual quality, identifying the best motion vector can cost significant computing power.
Further, while it is desirable to obtain the best compression quality when encoding video to obtain the best visual quality, in real-time video encoding, there is only a finite amount of time to process (e.g., encode) each video frame or slice. Conventional encoding systems may not effectively achieve good compression quality for video while meeting real-time processing requirements.